ref: https://dlorenc.medium.com/improving-tofu-with-transparency-da674aa2879d
本篇文章要介紹的是一種名為 TOFU 的認證機制,其全名為 Trust-On-First-Use.
要探討這個機制前,作者先列舉一個情境
假設你人要到火車站去找一個名為 Alice 的人交換手提箱,你要如何於火車站正確的找到 Alice?
# Nothing
最基本的情況就是你看到每個人都詢問,你是不是 Alice,但是任何人都可以說謊假裝自己是 Alice,因此惡意攻擊者跟 Alice
一樣都可以輕鬆回答你「我就是 Alice」,顯而易見這種機制基本上沒有辦法幫助我們找到 Alice,也沒有辦法分辨到底眼前的人是惡意攻擊者還是 Alice。
一種改善的機制就是 PKI (Public Key Infrastructure),該機制的概念是
1. 有一個第三方服務會發行相關的 ID 證件,該 ID 證件難以偽造 (譬如 Certificate Authorities)
2. 你信賴這個第三方服務
所以你到火車站之後,每遇到一個人就要求對方出示其 ID,並且請第三方服務幫忙驗證這個 ID 證件是否合法,透過這種概念來找到到底誰是 Alice。
這種機制運作起來沒有問題,唯一的問題就是找到一個可信任的第三方服務相對複雜且困難。
有沒有一種相對簡單又有點有效的機制? 就是本篇要探討的 TOFU
假設情境改成,今天需要頻繁的到火車站去找 Alice 交換行李箱,這件事情會重複非常多次。這種情境下,我們可以
記住第一次遇到號稱自己是 Alice 的那個人,接下來每次都找該人交易。
簡單來說就是,相信第一次遇到的人,並且記住該人的狀態與面貌,接下來每次交易都直接尋找上次熟悉的面孔。
網路世界來說,一個非常知名使用 TOFU 的軟體就是 SSH。
SSH 使用者第一次連線到遠方 Server 時會相信自己連接到的是正確的 Server,同時將 Server 本身的指紋資訊給存入到本地快取。
因此接下來每次連接到該 SSH 的時候,就直接比較 Server 的指紋是否一致來確定是否連線。
這個機制聽起來很可怕,不過對於這種「很難預測第一次連線的 Server 是誰的狀態」的情境是滿堪用的,畢竟不容易一開始就被偽裝攻擊。
另外一個使用 TOFU 機制的概念就是 supply-chain security,假設你要透過 Packager Manager 來使用不同版本的 Package
這種情境下系統要如何信任每次抓到的 Package 都是正確的?
透過 TOFU 的機制將每個 Package 的 Hash 值都存放 local,這種情況下就可以去比對第二次,第三次下載的內容是否一致。
不過對於 CI 環境下,要一直維持 local cache 實在不容易,因此 Trust-On-First-Use 就會演化成另外一種 Trust-On-Every-Use.
文章後續還介紹 golang 生態系的 go get 是採用何種機制去信任每次下載的 library,對於這篇文章有興趣的不要錯過
「golang package」的推薦目錄:
- 關於golang package 在 矽谷牛的耕田筆記 Facebook 的最讚貼文
- 關於golang package 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最讚貼文
- 關於golang package 在 Taipei Ethereum Meetup Facebook 的最佳解答
- 關於golang package 在 Golang Package 初學者指南 的評價
- 關於golang package 在 Standard Go Project Layout - GitHub 的評價
- 關於golang package 在 GoLang Packages and Modules | Beginners Go Tutorial 的評價
- 關於golang package 在 Cannot find package when running golang test - Stack Overflow 的評價
golang package 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最讚貼文
เดี๋ยวก็จะปีใหม่แหละ มาลองเรียนอะไรใหม่ๆ ดีมั๊ย
คอร์สเรียนภาษา GO หรือ Golang (จาก Google)
สอนโดยอาจารย์ Ian Harris จาก University of California, Irvine
เรียนฟรี แต่ถ้าอยากได้ใบ cert ต้องเสียเงินเองนะ
.
จุดเด่นของภาษานี้
เป็น open source
เหมาะเอาไปเขียนโปรแกรมแบบ Concurrency
(concurrent programming)
สร้างโปรแกรมง่าย มีความน่าเชื่อถือ และมีประสิทธิภาพ
ไวยากรณ์คล้ายคลึงภาษา c
แต่มีความปลอดภัยมากกว่าเยอะ
ไม่ต้องใช้ ; ปิดท้ายจบประโยคคำสั่ง (ดีมั๊ย)
.
// ตัวอย่างโค้ด Hello world จะประมาณนี้แหละ
package main
import "fmt"
func main() {
fmt.Println("Hello world")
}
.
.
มีสามคอร์ส ไล่เรียนตั้งแต่ข้อ 1 2, 3 ตามลำดับ
ดังนี้
1) Getting Started with Go
https://www.coursera.org/learn/golang-getting-started
.
2) Functions, Methods, and Interfaces in Go
https://www.coursera.org/learn/golang-functions-methods
.
3) Concurrency in Go
https://www.coursera.org/learn/golang-concurrency
.
หน้ารวม https://www.coursera.org/specializations/google-golang
.
เก่งเมื่อไรก็มาสอน มาแชร์ความรู้กันบ้างเนอะ
.
.
.
.
<ประชาสัมพันธ์ ขายหนังสือ/>
“โปรแกรมเมอร์ก็รวยได้ ด้วยเส้นทางเอาท์ซอร์สสายดำ”
ความยาว 170 กว่าหน้ากระดาษ A5 (≈ 41,002 คำ)
แบ่งเป็น 2 เวอร์ชั่น
.
👉 1) เวอร์ชั่นเล่มกระดาษจริง
เนื้อในเป็นขาวดำนะ ราคา 350 ฿
ติดต่อสั่งซื้อได้ที่ไลน์ @269aibvq
จำนวนเล่มมีจำกัดพิมพ์มาน้อย มากกกก ก ล้านตัว
.
👉 2) เวอร์ชั่นอีบุ๊กอ่านผ่านโปรแกรมของเว็บ mebmarket
เนื้อในเป็นสีสัน ไม่มีแจก PDF ปรินต์ออกมาไม่ได้
ราคาถูกลงมาหน่อย 250 บาท ฿
กับ 279 บาท ฿ (ซื้อผ่านระบบ Apple)
ซื้อได้ที่ 👇
https://www.mebmarket.com/web/index.php?action=BookDetails&data=YToyOntzOjc6InVzZXJfaWQiO3M6NzoiMTcyNTQ4MyI7czo3OiJib29rX2lkIjtzOjY6IjEzMTQxMiI7fQ
.
สำหรับตัวอย่างหนังสือ ดาวน์โหลดได้ตามลิงก์ข้างล่าง 👇
https://drive.google.com/open?id=1tAnMozeYd63dcbBGTQmT_ZrpSaamZS3e
.
✍ เขียนโดย โปรแกรมเมอร์ไทย thai programmer
golang package 在 Taipei Ethereum Meetup Facebook 的最佳解答
📜 [專欄新文章] Solidity Weekly #13
✍️ mingderwang
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
哪裡還能用 solidity 寫程式?
大家看過 Solidity Weekly 的人﹐應該都知道 Solidity 是為 Ethereum blockchain 開發出來的一種專門用來寫 Smart Contract (智能合約) 的電腦語言。編譯好的 solidity 程式﹐可以部署到 Ethereum 區塊鏈網路﹐讓其他程式透過 web3.js (for Javascript)、web3.py (for Python)、Nethereum (for C#、.NET、Unity)、或甚至還沒開始夯的 cloud native languages 之一 Ballerina package-ethereum (for Ballerina) 來與之互動。各有個別的開發 frameworks﹐以下我會做一個清單來說明。
但基本上用 Solidity 開發出來的程式﹐只要有 EVM (Ethereum Virtual Machine) 的環境﹐就可以執行。所以想像空間就更大了, 就像 Java 當年想跨平台執行任何程式的夢想﹐如今也開始在區塊鏈(們) 上藉由 Solidity 做到跨區塊鏈也移植 Dapps 的夢想。(其實 Dapps 這個名詞﹐會漸漸不存在﹐因為每種 apps 包括手機程式、應用程式、遊戲軟體﹐甚至付費機制的 widgets、付費廣告、打賞平台、聊天網、早晚都會有連上區塊鏈的需求﹐所以終究每種 app 都是 Dapp。)
TL;DR
相容於 Ethereum 的 EVM 的區塊鏈﹐都可以執行 Solidity 開發出來的程式﹐當然包括用不同語言開發出來的 Ethereum client (node): geth (in Golang)、Parity (in Rust)、以及還在 0.2.0 alpha 的 Trinity (py-evm) (in Python)、cpp-ethereum (for C++)、等等…
所以﹐還有哪些地方可以用 Solidity 寫程式?EOS? (原本以為 EOS.IO 說要支援 Solidity,﹐但看似計畫取消﹐還是要用 C++ 才能撰寫 EOS contracts)
另一個可能性是 eWASM (Ethereum Web Assembly)﹐Web Assembly 支援的 browsers 還蠻多的﹐但 Ethereum 在這方面的還在發展中﹐應該會在 Ethereum 2.0 Roadmap 裡。
最後還有一個 RSK 可以部署 Solidity 程式﹐我還在測試中。感覺很怪, 花 Bitcoin 的錢去執行 gas 會不會太貴﹐有點像在開 Hybridge cars。
開發環境清單:
Javascript
ZeppellinOS、Dapp、Truffle (+ Drizzle)、Embark
Python
Populus
C#, F#, .NET (also for Unity3D)
Nethereum
links 分享;
Unit testing Solidity contracts on Ethereum with Go — (Nathan Murthy)
Nethereum 2.0.0 rc5 — Unity3d integration — (Juan Blanco)﹐Ming> 有興趣開發區塊鏈 3D games 可以參考。
註: 還有沒有列到但值得一提的 EVM 語言或工具﹐大家可以留言…
Solidity Weekly #13 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
golang package 在 Standard Go Project Layout - GitHub 的推薦與評價
Contribute to golang-standards/project-layout development by creating an account ... generic and it doesn't try to impose a specific Go package structure. ... <看更多>
golang package 在 GoLang Packages and Modules | Beginners Go Tutorial 的推薦與評價
In this video we will learn about Go Packages and Modules. We will learn about the DRY principle and reusable code and that go functions and ... ... <看更多>
golang package 在 Golang Package 初學者指南 的推薦與評價
基本上來說,package 不過是Go 工作區中包含一個或多個Go 原始檔案或其他Go package 的目錄。 ... 上面的package 宣告必須是Go 原始檔案中的第一行程式碼。 ... <看更多>
相關內容